home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 November: Tool Chest / Dev.CD Nov 98 TC.toast / Sample Code / Files / MoreIsBetter / MIB-Libraries / Sources / MoreTextUtils.cp < prev    next >
Encoding:
Text File  |  1998-09-25  |  2.5 KB  |  140 lines  |  [TEXT/CWIE]

  1. /*
  2.     File:        MoreTextUtils.cp
  3.  
  4.     Contains:    
  5.  
  6.     Written by:    Pete Gontier (PCG)
  7.  
  8.     Copyright:    Copyright (c) 1998 Apple Computer, Inc.
  9.  
  10.     Change History (most recent first):
  11.  
  12.          <1>     6/16/98    PCG     initial checkin
  13. */
  14.  
  15.  
  16. #include "MoreTextUtils.h"
  17.  
  18. #ifndef __RESOURCES__
  19. #    include <Resources.h>
  20. #endif
  21.  
  22. #ifndef __PLSTRINGFUNCS__
  23. #    include <PLStringFuncs.h>
  24. #endif
  25.  
  26. pascal OSErr NewStringPtr (ConstStr255Param init, UInt8 maxSize, StringPtr *result)
  27. {
  28.     OSErr err = noErr;
  29.  
  30.     if (!MoreAssert (result && (!init || (*init <= maxSize))))
  31.         err = paramErr;
  32.     else
  33.     {
  34.         *result = StringPtr (NewPtr (1 + (maxSize ? maxSize : (init ? *init : 255))));
  35.  
  36.         if (!*result)
  37.             err = MemError ( );
  38.         else if (init && *init)
  39.             PLstrcpy (*result,init);
  40.         else
  41.             **result = 0;
  42.     }
  43.  
  44.     return err;
  45. }
  46.  
  47. pascal OSErr NewStringListHandle (Handle *h)
  48. {
  49.     DebugStr ("\pThis routine has never been traced.");
  50.  
  51.     if (!MoreAssert (h))
  52.         return nilHandleErr;
  53.     *h = NewHandleClear (sizeof (UInt16));
  54.     if (!*h)
  55.         return MemError ( );
  56.     return noErr;
  57. }
  58.  
  59. pascal OSErr AppendStringToListHandle (ConstStr255Param str, Handle h)
  60. {
  61.     DebugStr ("\pThis routine has never been traced.");
  62.  
  63.     OSErr err = noErr;
  64.  
  65.     if (!MoreAssert (h && *h))
  66.         err = nilHandleErr;
  67.     else
  68.     {
  69.         UInt8 dummyZero;
  70.  
  71.         if (!str)
  72.         {
  73.             dummyZero = 0;
  74.             str = &dummyZero;
  75.         }
  76.  
  77.         if (!(err = PtrAndHand (str, h, *str + 1)))
  78.             (** (UInt16 **) h) += 1;
  79.     }
  80.  
  81.     return err;
  82. }
  83.  
  84. pascal OSErr GetNewStringList (short resID, tStringListP *newStringList)
  85. {
  86.     OSErr err = noErr;
  87.  
  88.     Handle h = GetResource ('STR#',resID);
  89.  
  90.     if (!h)
  91.     {
  92.         err = ResError ( );
  93.         if (!err) err = resNotFound;
  94.     }
  95.     else
  96.     {
  97.         Size handleSize = InlineGetHandleSize (h);
  98.         (void) MoreAssert (MemError ( ) == noErr);
  99.  
  100.         if (handleSize < 2)
  101.             err = paramErr;
  102.         else
  103.         {
  104.             UInt16    stringCount        = ** (UInt16 **) h;
  105.             Size    stringListSize    = sizeof (**newStringList) + (handleSize - 2) +
  106.                                         (stringCount * sizeof (StringPtr));
  107.  
  108.             *newStringList = (tStringListP) NewPtr (stringListSize);
  109.  
  110.             if (!*newStringList)
  111.                 err = MemError ( );
  112.             else
  113.             {
  114.                 (*newStringList)->count = stringCount;
  115.  
  116.                 if (stringCount)
  117.                 {
  118.                     UInt16 index = 0;
  119.  
  120.                     StringPtr stringScan = (StringPtr) ((*newStringList)->list + stringCount);
  121.  
  122.                     BlockMoveData (2 + *h, stringScan, handleSize - 2);
  123.  
  124.                     do
  125.                     {
  126.                         (*newStringList)->list [index] = stringScan;
  127.                         stringScan += *stringScan + 1;
  128.                     }
  129.                     while (++index < stringCount);
  130.                 }
  131.             }
  132.         }
  133.  
  134.         ReleaseResource (h);
  135.         (void) MoreAssert (ResError ( ) == noErr);
  136.     }
  137.  
  138.     return err;
  139. }
  140.